package com.ewanghuiju.app.base;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;

import com.ewanghuiju.app.R;
import com.ewanghuiju.app.app.ActivityHook;
import com.ewanghuiju.app.app.App;
import com.ewanghuiju.app.util.LoadingDialogUtils;
import com.gyf.immersionbar.ImmersionBar;
import com.kingbogo.logview.LogView;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.umeng.analytics.MobclickAgent;

import androidx.appcompat.widget.Toolbar;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import io.reactivex.annotations.Nullable;
import me.jessyan.autosize.AutoSizeCompat;
import me.jessyan.autosize.internal.CustomAdapt;
import me.yokeyword.fragmentation.SupportActivity;

/**
 * @author sj  qq:751943509
 * @class 无MVP的activity基类
 * @time 2020/2/10
 */
public abstract class SimpleActivity extends SupportActivity implements CustomAdapt {

    protected Activity mContext;
    private Unbinder mUnBinder;
    protected Toolbar mToolbar;
    protected TextView tvTitle;

    protected MenuItem menuItemFirse, menuItemSecond;

    protected boolean finishAnim = true;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        ActivityHook.hookOrientation(this);//hook，绕过检查
        super.onCreate(savedInstanceState);
        setContentView(getLayout());
        mUnBinder = ButterKnife.bind(this);
        mContext = this;
        initToolbar();
        //初始化沉浸式
        initImmersionBar();
        onViewCreated();
        initView(savedInstanceState);
        App.getInstance().addActivity(this);
        intSmartRefreshLayout();
        initEventAndData();
    }

    protected void intSmartRefreshLayout() {
        try {
            SmartRefreshLayout refreshLayout = findViewById(R.id.refreshLayout);
            if (refreshLayout != null) {
                refreshLayout.setEnableRefresh(false);//是否启用下拉刷新功能
                refreshLayout.setEnableLoadMore(false);//是否启用上拉加载功能
                refreshLayout.setEnablePureScrollMode(true);//是否启用纯滚动模式
                refreshLayout.setEnableOverScrollBounce(true);//是否启用越界回弹
                refreshLayout.setEnableOverScrollDrag(true);//是否启用越界拖动（仿苹果效果）
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 初始化顶部导航栏
     */
    protected void initToolbar() {
        try {
            mToolbar = findViewById(R.id.mtoolbar);
            if (mToolbar != null) {
                setSupportActionBar(mToolbar);
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                getSupportActionBar().setDisplayShowHomeEnabled(true);
                getSupportActionBar().setDisplayShowTitleEnabled(false);
                mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onBackPressedSupport();
                    }
                });
            }
            tvTitle = findViewById(R.id.tv_title);
            if (tvTitle != null) {
                int res = getTitleIntText();
                String title = getTitleStrText();
                if (res == 0) {
                    tvTitle.setText(title);
                } else {
                    tvTitle.setText(res);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 右边划出
     */
    protected void slideLeftOut() {
        overridePendingTransition(R.anim.setup_pre_in, R.anim.setup_pre_out);
    }

    /**
     * 进入
     */
    protected void slideRightIn() {
        overridePendingTransition(R.anim.setup_next_in,
                R.anim.setup_next_out);
    }

    /**
     * 初始化沉浸式
     * Init immersion bar.
     */
    protected void initImmersionBar() {
        //设置共同沉浸式样式
        ImmersionBar.with(this).navigationBarColor(R.color.white).init();
    }

    protected void onViewCreated() {

    }

    @Override
    public void finish() {
        super.finish();
        if (finishAnim)
            slideLeftOut();
    }

    @Override
    protected void onDestroy() {
        LoadingDialogUtils.unInit();
        super.onDestroy();
        App.getInstance().removeActivity(this);
        mUnBinder.unbind();
    }

    protected void initView(Bundle savedInstanceState) {

    }

    protected abstract int getLayout();

    protected abstract void initEventAndData();

    protected int getTitleIntText() {
        return 0;
    }

    protected String getTitleStrText() {
        return "";
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        menuItemSecond = menu.findItem(R.id.action_search);
        menuItemFirse = menu.findItem(R.id.action_time);
        setOptionsMenu();
        return true;
    }

    protected void setOptionsMenu() {

    }

    /**
     * 执行动画
     *
     * @param fromX
     * @param toX
     * @param fromY
     * @param toY
     * @return
     */
    protected Animation createTranslateAnimation(float fromX, float toX, float fromY, float toY) {
        Animation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,
                fromX,
                Animation.RELATIVE_TO_SELF,
                toX,
                Animation.RELATIVE_TO_SELF,
                fromY,
                Animation.RELATIVE_TO_SELF,
                toY);
        animation.setDuration(500);
        animation.setInterpolator(new DecelerateInterpolator());
        return animation;
    }

    protected void onResume() {
        super.onResume();
        MobclickAgent.onResume(this);
    }

    protected void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
    }

    /**
     * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选择一个作为基准进行适配)
     *
     * @return {@code true} 为按照宽度进行适配, {@code false} 为按照高度进行适配
     */
    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    /**
     * 这里使用 iPhone 的设计图, iPhone 的设计图尺寸为 750px * 1334px, 高换算成 dp 为 667 (1334px / 2 = 667dp)
     * <p>
     * 返回设计图上的设计尺寸, 单位 dp
     * {@link #getSizeInDp} 须配合 {@link #isBaseOnWidth()} 使用, 规则如下:
     * 如果 {@link #isBaseOnWidth()} 返回 {@code true}, {@link #getSizeInDp} 则应该返回设计图的总宽度
     * 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度
     * 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0}
     *
     * @return 设计图上的设计尺寸, 单位 dp
     */
    @Override
    public float getSizeInDp() {
        return 667;
    }

    @Override
    public Resources getResources() {
        //需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
        AutoSizeCompat.autoConvertDensityOfGlobal(super.getResources());//如果没有自定义需求用这个方法
//        AutoSizeCompat.autoConvertDensity(super.getResources(), 667, false);//如果有自定义需求就用这个方法
        return super.getResources();
    }

    @Override
    protected void onStart() {
        super.onStart();
        LogView.getInstance().attach(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        LogView.getInstance().detach(this);
    }

}
